//////////////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2014-present, Egret Technology.
//  All rights reserved.
//  Redistribution and use in source and binary forms, with or without
//  modification, are permitted provided that the following conditions are met:
//
//     * Redistributions of source code must retain the above copyright
//       notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright
//       notice, this list of conditions and the following disclaimer in the
//       documentation and/or other materials provided with the distribution.
//     * Neither the name of the Egret nor the
//       names of its contributors may be used to endorse or promote products
//       derived from this software without specific prior written permission.
//
//  THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
//  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
//  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
//  IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
//  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
//  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
//  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
//  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
//  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////
class Main extends eui.UILayer {    
    

    protected createChildren(): void {
        super.createChildren();

        egret.lifecycle.addLifecycleListener((context) => {
            // custom lifecycle plugin
        })

        egret.lifecycle.onPause = () => {
            egret.ticker.pause();
        }

        egret.lifecycle.onResume = () => {
            egret.ticker.resume();
        }

        //inject the custom material parser
        //注入自定义的素材解析器
        let assetAdapter = new AssetAdapter();
        egret.registerImplementation("eui.IAssetAdapter", assetAdapter);
        egret.registerImplementation("eui.IThemeAdapter", new ThemeAdapter());


        this.runGame().catch(e => {
            console.log(e);
        })
    }

    private async runGame() {
        RES.setMaxLoadingThread(1); //防加载卡死
        await this.loadResource();
        this.createGameScene();
        
        let LevelScoreData:string;        
        if (egret.localStorage.getItem("FlySims")) {
            LevelScoreData =  egret.localStorage.getItem("FlySims");  
            Global.globalVar.instance.initobj = JSON.parse(LevelScoreData);
            console.log(Global.globalVar.instance.initobj.LevelPTS[0].aircraft);   
        } 
        else 
        {
             
            LevelScoreData = JSON.stringify(Global.globalVar.instance.initobj);
            egret.localStorage.setItem("FlySims", LevelScoreData);        
            //console.log(LevelScoreData);    
        }

        //const result = await RES.getResAsync("description_json")
        //this.startAnimation(result);
        //await platform.login();
        //const userInfo = await platform.getUserInfo();
        //console.log(userInfo);
        /*let level = "1";
        let score = "7";
        let KVDataList = [{ 
            key: Consts.OpenDataKeys.ScoreKey+level, 
            value: score 
        }];
        platform.setUserCloudStorage(KVDataList);*/

    }

    private async loadResource() {
        try {
            await RES.loadConfig("resource/default.res.json", "resource/");
            const loadingView = new LoadingUI();            
            //加载loading组
            await RES.loadGroup("loading");
            this.stage.addChild(loadingView);
            
            await this.loadTheme();
            await RES.loadGroup("preload", 0, loadingView);
            this.stage.removeChild(loadingView);
        }
        catch (e) {
            console.error(e);
        }
    }

    private loadTheme() {
        return new Promise((resolve, reject) => {
            // load skin theme configuration file, you can manually modify the file. And replace the default skin.
            //加载皮肤主题配置文件,可以手动修改这个文件。替换默认皮肤。
            let theme = new eui.Theme("resource/default.thm.json", this.stage);
            theme.addEventListener(eui.UIEvent.COMPLETE, () => {
                resolve();
            }, this);

        })
    }
    
    /**
     * 创建场景界面
     * Create scene interface
     */
    protected createGameScene(): void {        
        Custom.SceneMngDispatcher.ins.addEventListener(Custom.SceneMngEvent.LOGO, this.MsgRecv, this);
        Custom.SceneMngDispatcher.ins.addEventListener(Custom.SceneMngEvent.LEVEL, this.MsgRecv, this);
        Custom.SceneMngDispatcher.ins.addEventListener(Custom.SceneMngEvent.GameMain, this.MsgRecv, this);
        //let logoView: LogoScene = new LogoScene();                
        //this.stage.addChild(logoView);

        // 把this设置为场景管理器的根舞台
        SceneMng.instance.setStage(this);
        // 调用SceneManager的静态方法
        SceneMng.toLogoScene();
    }
    

    private MsgRecv(e:Custom.SceneMngEvent) {
        switch (e.data) {
            case 0:
                console.log('logo');
                break;
            case 1:
                console.log('level');                                
                SceneMng.toLevelScene();
                break;
            case 2:
                console.log('GameMain');
                break;
        }
    }

}
